/**
 * 通过$provide创建服务
 * $provide是内置的服务
 */
export const selfProvide =  $provide => {
    $provide.factory('selfProvide', ()=>{
        return {
            title: 'hello self provide'
        }
    });
}
/**
 * 通过factory创建服务
 * 可通过装饰器对服务进行扩展
 */
export const selfFactory =  ngModule => {
    ngModule.factory('selfFactory', ()=>{
        return {
            str: (s)=>{
                return s
            }
        }
    }).config(($provide)=>{
        $provide.decorator('selfFactory',($delegate)=>{
            $delegate.title = '装饰器效果测试!';
            return $delegate;
        })
    });
}
/**
 * 通过service创建服务
 * app.service(name, fn)
 * name为服务名称
 * fn为构造函数,由于this指向问题，不能使用箭头函数
 * 可通过 new Fn的方式返回多例服务，实际场景少，参考angular实战 p142
 */
export const selfService =  ngModule => {
    ngModule.service('selfService', function fn(){
        this.print = (str)=> console.log(str);
    });
}
/**
 * 通过constant创建服务
 * app.constant(name, value)
 * 可注入到config配置函数中
 */
export const selfConstant =  ngModule => {
    ngModule.constant('selfConstant', 'hello constant');
}

/**
 * 通过value创建服务
 * app.value(name, value)
 * 不可注入到config配置函数中
 */
export const selfValue =  ngModule => {
    ngModule.value('selfValue', 'hello value');
}